﻿using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Threading;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace FrontEndPlus.Módulos.Seguridad
{
    public partial class wbfrm_Respaldos : System.Web.UI.Page
    {
        WCF_Gimnasio.cls_Respaldos _BSRespaldos = new WCF_Gimnasio.cls_Respaldos();
        WCF_Gimnasio.cls_Gimnasio _BSGimnasio = new WCF_Gimnasio.cls_Gimnasio();
        WCF_Gimnasio.ServiceClient _servicio = new WCF_Gimnasio.ServiceClient();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                try
                {
                    _BSGimnasio.IdUsuarioInicioSeccion = Convert.ToInt32(Session["idUSuario"]);
                    cb_Gimnasios_Programado.DataTextField = "Nombre_Centro";
                    cb_Gimnasios_Programado.DataValueField = "Id_Gimnasio";
                    cb_Gimnasios_Programado.DataSource = _servicio.Listar(1, _BSGimnasio).Tables[0];
                    cb_Gimnasios_Programado.DataBind();

                    cb_Gimnasios_Respaldos.DataTextField = "Nombre_Centro";
                    cb_Gimnasios_Respaldos.DataValueField = "Id_Gimnasio";
                    cb_Gimnasios_Respaldos.DataSource = _servicio.Listar(1, _BSGimnasio).Tables[0];
                    cb_Gimnasios_Respaldos.DataBind();

                    _BSRespaldos.IdGimnasio = Convert.ToInt32(cb_Gimnasios_Programado.SelectedValue);
                    _BSRespaldos.IdUsuarioInicioSeccion = Convert.ToInt32(Session["idUSuario"]);
                    _BSRespaldos = (WCF_Gimnasio.cls_Respaldos)_servicio.TraerObjeto(_BSRespaldos);

                    txt_Ruta_Programada.Text = _BSRespaldos.ServidorFTP;
                    txt_Usuario_Programado.Text = _BSRespaldos.UsuarioFTP;
                    txt_Password_Programado.Text = _BSRespaldos.PasswordFTP;
                    chb_Lunes.Checked = _BSRespaldos.Lunes;
                    chb_Martes.Checked = _BSRespaldos.Martes;
                    chb_Miercoles.Checked = _BSRespaldos.Miercoles;
                    chb_Jueves.Checked = _BSRespaldos.Jueves;
                    chb_Viernes.Checked = _BSRespaldos.Viernes;
                    chb_Sabado.Checked = _BSRespaldos.Sabado;
                    chb_Domingo.Checked = _BSRespaldos.Domingo;
                    lbl_SPS.Text = _BSRespaldos.CantidadSP;
                    lbl_Tablas.Text = _BSRespaldos.CantidadTablas;
                    lbl_Tamano.Text = _BSRespaldos.TamanoBD;
                    string hora_Final = "";
                    if (_BSRespaldos.HoraRespaldo.Hour.ToString().Length == 1)
                        hora_Final = _BSRespaldos.HoraRespaldo.Hour + ":00";
                    else
                        hora_Final = _BSRespaldos.HoraRespaldo.Hour + ":00";
                    if (_BSRespaldos.HoraRespaldo.Hour <= 12)
                        hora_Final += "am";
                    else
                        hora_Final += "pm";
                    txt_Hora.Text = hora_Final;
                }
                catch (Exception ex)
                {
                    string script = @"<script type='text/javascript'> smoke.alert('" + ex.Message + "', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                }
                finally
                {
                    _servicio.Close();
                }
            }
        }

        protected void btn_Respaldar_Click(object sender, EventArgs e)
        {
            try
            {
                if (Directory.Exists(txt_Ruta_Local.Text))
                {
                    DateTimeFormatInfo dtinfo = new CultureInfo("es-ES", false).DateTimeFormat;
                    string referencia = "";
                    _BSRespaldos.TipoAccion = "BACKUP";
                    _BSRespaldos.IdGimnasio = Convert.ToInt32(cb_Gimnasios_Respaldos.SelectedValue);
                    _BSRespaldos.IdUsuarioInicioSeccion = Convert.ToInt32(Session["idUSuario"]);
                    _BSRespaldos = (WCF_Gimnasio.cls_Respaldos)_servicio.TraerObjeto(_BSRespaldos);
                    _BSRespaldos.FechaRespaldo = DateTime.Now;
                    _BSRespaldos.NombreArchivo = "DBGimnasio" + "_" + _BSRespaldos.FechaRespaldo.Year + "_" + dtinfo.GetMonthName(_BSRespaldos.FechaRespaldo.Month) + "_" + _BSRespaldos.FechaRespaldo.Day + "__" + _BSRespaldos.FechaRespaldo.Hour + "_" + _BSRespaldos.FechaRespaldo.Minute + "_" + _BSRespaldos.FechaRespaldo.Second + ".bak";
                    _BSRespaldos.RutaDescarga = _BSRespaldos.ServidorFTP + _BSRespaldos.NombreArchivo;
                    string rutaLocal = @txt_Ruta_Local.Text;
                    _servicio.InsertarActualizarRegistro(true, ref referencia, _BSRespaldos);
                    cls_Ftp_Remote_Download _descarga = new cls_Ftp_Remote_Download(_BSRespaldos.RutaDescarga, rutaLocal, _BSRespaldos.UsuarioFTP, _BSRespaldos.PasswordFTP);
                    string mensajeRetorno = _descarga.DownloadFile();
                    string script = "<script type='text/javascript'> smoke.alert('" + mensajeRetorno.ToString() + "', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                }
                else
                {
                    string script = @"<script type='text/javascript'> smoke.alert('La Ruta ingresada no existe', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                }
            }
            catch (Exception ex)
            {
                string script = @"<script type='text/javascript'> smoke.alert('" + ex.Message + "', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
            }
            finally
            {
                _servicio.Close();
            }
        }

        protected void btn_Guarda_Parametros_Click(object sender, EventArgs e)
        {
            try
            {
                _BSRespaldos.IdUsuarioInicioSeccion = Convert.ToInt32(Session["idUSuario"]);
                _BSRespaldos.IdGimnasio = Convert.ToInt32(cb_Gimnasios_Programado.SelectedValue);
                _BSRespaldos = (WCF_Gimnasio.cls_Respaldos)_servicio.TraerObjeto(_BSRespaldos);
                bool existeConfig = false;
                if (_BSRespaldos.ServidorFTP != null)
                    existeConfig = true;

                string referecia = "";
                string rutaFTP = txt_Ruta_Programada.Text;
                if (rutaFTP[rutaFTP.Length - 1] != '/')
                    rutaFTP += "/";
                _BSRespaldos.ServidorFTP = rutaFTP;
                _BSRespaldos.UsuarioFTP = txt_Usuario_Programado.Text;
                _BSRespaldos.PasswordFTP = txt_Password_Programado.Text;
                _BSRespaldos.IdGimnasio = Convert.ToInt32(cb_Gimnasios_Programado.SelectedValue);
                cls_Ftp_Remote_Download _descarga = new cls_Ftp_Remote_Download(_BSRespaldos.ServidorFTP, "", _BSRespaldos.UsuarioFTP, _BSRespaldos.PasswordFTP);
                string mensaje = _descarga.verificaFTP();
                if (mensaje == "Correcto")
                {
                    
                    _BSRespaldos.Lunes = chb_Lunes.Checked;
                    _BSRespaldos.Martes = chb_Martes.Checked;
                    _BSRespaldos.Miercoles = chb_Miercoles.Checked;
                    _BSRespaldos.Jueves = chb_Jueves.Checked;
                    _BSRespaldos.Viernes = chb_Viernes.Checked;
                    _BSRespaldos.Sabado = chb_Sabado.Checked;
                    _BSRespaldos.Domingo = chb_Domingo.Checked;
                    _BSRespaldos.HoraRespaldo = Convert.ToDateTime(txt_Hora.Text);
                    if (existeConfig)
                    {
                        _BSRespaldos.TipoAccion = "ACTUALIZAR";
                        _servicio.InsertarActualizarRegistro(false, ref referecia, _BSRespaldos);
                    }
                    else
                    {
                        _BSRespaldos.TipoAccion = "INSERTAR";
                        _servicio.InsertarActualizarRegistro(false, ref referecia, _BSRespaldos);
                    }
                    string script = "<script type='text/javascript'> smoke.alert('Parametros Guardados correctamente', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                }
                else
                {
                    string script = "<script type='text/javascript'> smoke.alert('" + mensaje + "', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                }
            }
            catch (Exception ex)
            {
                string script = @"<script type='text/javascript'> smoke.alert('" + ex.Message + "', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
            }
            finally
            {
                _servicio.Close();
            }
        }

        protected void btn_Upload_Click(object sender, EventArgs e)
        {
            try
            {
                Boolean fileOK = false;
                String path = Server.MapPath("~/Uploads/");
                if (fu_Base_Datos.HasFile)
                {
                    String fileExtension = Path.GetExtension(fu_Base_Datos.FileName).ToLower();
                    String[] allowedExtensions = { ".bak" };
                    for (int i = 0; i < allowedExtensions.Length; i++)
                    {
                        if (fileExtension == allowedExtensions[i])
                        {
                            fileOK = true;
                        }
                    }
                }

                if (fileOK)
                {
                    DateTimeFormatInfo dtinfo = new CultureInfo("es-ES", false).DateTimeFormat;
                    string referencia = "";
                    _BSRespaldos.TipoAccion = "BACKUP";
                    _BSRespaldos.IdGimnasio = Convert.ToInt32(cb_Gimnasios_Respaldos.SelectedValue);
                    _BSRespaldos.IdUsuarioInicioSeccion = Convert.ToInt32(Session["idUSuario"]);
                    _BSRespaldos = (WCF_Gimnasio.cls_Respaldos)_servicio.TraerObjeto(_BSRespaldos);
                    _BSRespaldos.FechaRespaldo = DateTime.Now;
                    _BSRespaldos.NombreArchivo = "DBGimnasio" + "_" + _BSRespaldos.FechaRespaldo.Year + "_" + dtinfo.GetMonthName(_BSRespaldos.FechaRespaldo.Month) + "_" + _BSRespaldos.FechaRespaldo.Day + "__" + _BSRespaldos.FechaRespaldo.Hour + "_" + _BSRespaldos.FechaRespaldo.Minute + "_" + _BSRespaldos.FechaRespaldo.Second + ".bak";
                    _BSRespaldos.RutaDescarga = _BSRespaldos.ServidorFTP + _BSRespaldos.NombreArchivo;
                    _servicio.InsertarActualizarRegistro(true, ref referencia, _BSRespaldos);

                    _BSRespaldos.TipoAccion = "RESTORE";
                    _BSRespaldos.NombreArchivo = fu_Base_Datos.FileName;
                    _BSRespaldos.RutaDescarga = _BSRespaldos.ServidorFTP + _BSRespaldos.NombreArchivo;
                    fu_Base_Datos.PostedFile.SaveAs(Server.MapPath("~/Uploads/" + fu_Base_Datos.FileName));
                    byte[] _backup = FileToByteArray(Server.MapPath("~/Uploads/" + fu_Base_Datos.FileName)).DocContent;
                    cls_Ftp_Remote_Upload _ftp = new cls_Ftp_Remote_Upload(_backup, fu_Base_Datos.FileName, _BSRespaldos.RutaDescarga, _BSRespaldos.UsuarioFTP, _BSRespaldos.PasswordFTP);
                    _ftp.UploadFile();
                    _servicio.InsertarActualizarRegistro(true, ref referencia, _BSRespaldos);

                    FormsAuthentication.SignOut();
                    FormsAuthentication.RedirectToLoginPage();
                }
                else
                {
                    string script = "<script type='text/javascript'> smoke.alert('El archivo debe ser formato .BAK', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                    File.Delete(path + fu_Base_Datos.FileName);
                }
            }
            catch (Exception ex)
            {
                string script = @"<script type='text/javascript'> smoke.alert('" + ex.Message + "', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
            }
            finally
            {
                _servicio.Close();
            }
        }

        private cls_Document FileToByteArray(string fileName)
        {
            try
            {
                byte[] fileContent = null;
                System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
                System.IO.BinaryReader binaryReader = new System.IO.BinaryReader(fs);
                long byteLength = new System.IO.FileInfo(fileName).Length;
                fileContent = binaryReader.ReadBytes((Int32)byteLength);
                fs.Close();
                fs.Dispose();
                binaryReader.Close();
                cls_Document documento = new cls_Document();
                documento.DocName = fileName;
                documento.DocContent = fileContent;
                return documento;
            }
            catch (Exception ex)
            {
                string script = "<script type='text/javascript'> smoke.alert('" + @ex.Message + "', function (e) {}, {ok: 'OK',classname: 'custom-class'}); </script>";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "alerta", script, false);
                return null;
            }
        }
    }
}